﻿namespace MicroCloud.Utils
{
    /// <summary>
    /// String类型长度大小属性
    /// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
    public class StringSizeAttribute : StringLengthAttribute
    {
        #region 构造函数
        /// <summary>
        /// 初始化一个String类型长度大小属性 <see cref="StringSizeAttribute"/> 的新实例
        /// </summary>
        /// <param name="sizeType">字符串大小类型</param>
        public StringSizeAttribute(StringSizeType sizeType = StringSizeType.General)
            : this((int)sizeType)
        { }

        /// <summary>
        /// 初始化一个String类型长度大小属性 <see cref="StringSizeAttribute"/> 的新实例
        /// </summary>
        /// <param name="sizeValue">字符串大小值</param>
        public StringSizeAttribute(int sizeValue)
            : base(sizeValue)
        {
            SizeType = sizeValue.CastTo(StringSizeType.Custom);
            ErrorMessage = "{0} 长度必须介于 {2} 和 {1} 之间";
        }

        #endregion

        #region 属性
        /// <summary>
        /// 获取 字符串大小类型
        /// </summary>
        public StringSizeType SizeType { get; }

        #endregion

        #region 方法 - Overrides
        /// <summary>
        /// 基于发生错误的数据字段对错误消息应用格式设置
        /// </summary>
        /// <param name="name">要包括在带有格式的消息中的名称</param>
        /// <returns>带有格式的错误消息的实例</returns>
        public override string FormatErrorMessage(string name)
        {
            return I18N.T(ErrorMessage, name, MaximumLength, MinimumLength);
        }

        #endregion

    }

}
